package cn.iocoder.yudao.module.resource.dal.dataobject.messagecollection;

import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.resource.api.model.message.AudioDataDTO;
import cn.iocoder.yudao.module.resource.dal.dataobject.message.MessageDO;
import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
import lombok.*;

import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;

import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;

/**
 * 消息仓库 DO
 *
 * @author lizhongwen
 */
@TableName(value = "lm_message_collection", autoResultMap = true)
@KeySequence("lm_message_collection_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MessageCollectionDO extends BaseDO {

    /**
     * 消息id
     */
    @TableId(type = IdType.INPUT)
    private String messageId;

    /**
     * 消息来源
     */
    private Integer senderType;
    /**
     * 用户消息
     *
     * 枚举 {@link TODO MessageSenderType 对应的类}
     */
    private String userText;
    /**
     * 用户消息hash
     */
    private String userTextHash;
    /**
     * 回复消息
     */
    private String replyText;
    /**
     * 回复消息hash
     */
    private String replyTextHash;
    /**
     * 消息类型, 1: 文本/音频, 2: 图片, 3: 视频
     */
    private Integer contentType;
    /**
     * 音频数据
     */
    @TableField(typeHandler = AudioDataTypeHandler.class)
    private List<AudioDataDTO> audioData;
    /**
     * 扩展
     */
    private String extension;

    /**
     * 相似度
     */
    @TableField(exist = false)
    private Float similarity;


    public static class AudioDataTypeHandler extends AbstractJsonTypeHandler<Object> {

        @Override
        protected Object parse(String json) {
            return JsonUtils.parseArray(json, AudioDataDTO.class);
        }

        @Override
        protected String toJson(Object obj) {
            return JsonUtils.toJsonString(obj);
        }

    }

}